home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / biz / patch / fixobj11.lha / FixObj.e < prev   
Text File  |  1993-03-16  |  2KB  |  75 lines

  1. /* FixObj.e    Replaces $0d characters out of Pixel3D Pro
  2.            Wavefront files with $20
  3.            Also adds 'g' lines which set up grouping data
  4.            Also checks if file has already been operated on
  5.                                   */
  6.  
  7. ENUM ER_NONE, ER_FILE, ER_MEM, ER_USAGE,ER_BRK, ER_OUT, ER_FIXED
  8.  
  9. DEF flen, mem:PTR TO CHAR,wmem:PTR TO CHAR, pos:PTR TO CHAR,wpos:PTR TO CHAR
  10. DEF handle=NIL,corrections=0
  11.  
  12. PROC main()
  13.    WriteF('FixObj 1.1 : Fixes Pixel3DPro-generated Wavefront files\n')
  14.    WriteF('(c) 1993 Danimal\n\n')
  15.    IF StrCmp(arg,'',1) OR StrCmp(arg,'?',2) THEN error(ER_USAGE)
  16.    flen:=FileLength(arg)
  17.    handle:=Open(arg,OLDFILE)
  18.    IF (flen<1) OR (handle=NIL) THEN error(ER_FILE)
  19.    mem:=New(flen+4); wmem:= New(flen+10)
  20.    IF (mem=NIL OR wmem=NIL) THEN error(ER_MEM)
  21.    IF Read(handle,mem,flen)<>flen THEN error(ER_FILE)
  22.    Close(handle); handle:=NIL
  23.    WriteF('Now fixing "\s"\n',arg)
  24.    fix()
  25.    IF corrections=0 THEN error(ER_FIXED)
  26.    handle:=Open(arg,NEWFILE)
  27.    IF handle=NIL THEN error(ER_OUT)
  28.    WriteF('Writing "\s".\n',arg)
  29.    IF Write(handle,wmem,flen)<>flen THEN error(ER_OUT)
  30.    error(ER_NONE)
  31. ENDPROC
  32.  
  33. PROC error(nr)
  34.    IF handle THEN Close(handle)
  35.    SELECT nr
  36.       CASE ER_NONE;   WriteF('Done.\n')
  37.       CASE ER_FILE;   WriteF('Could not read file "\s"\n',arg)
  38.       CASE ER_MEM;    WriteF('No memory for loading file\n')
  39.       CASE ER_USAGE;  WriteF('USAGE: Wavefix <file>\n')
  40.       CASE ER_BRK;    WriteF('**User Break**\n')
  41.       CASE ER_OUT;    WriteF('Could not write file "\s"\n',arg)
  42.       CASE ER_FIXED;  WriteF('File "\s" appears to be already fixed.\n',arg)
  43.    ENDSELECT
  44.    CleanUp(0)
  45. ENDPROC
  46.  
  47. PROC fix()
  48. /*     This procedure makes the actual corrections to the file   */
  49.  
  50. DEF counter=0,firstf=NIL
  51.    pos:=mem; wpos:=wmem
  52.    IF pos[]<>$67
  53.       wpos[]++:=$67; wpos[]++:=$0a
  54.       flen:=flen+2
  55.       corrections++
  56.    ENDIF
  57.    REPEAT
  58.       IF CtrlC() THEN error(ER_BRK)
  59.       IF (pos[]=$66 AND (firstf=NIL) AND (corrections>0))
  60.      wpos[]++:=$67; wpos[]++:=$0a
  61.      firstf:=wpos
  62.      flen:=flen+2
  63.      corrections++
  64.       ENDIF
  65.       IF pos[]=$0D
  66.      pos[]:=$20
  67.      corrections++
  68.       ENDIF
  69.       IF pos[]=$0a THEN counter++
  70.       wpos[]++:=pos[]++
  71.       IF Mod(counter,50)=0 THEN WriteF('\bLine: \d   ',counter)
  72.    UNTIL (pos-mem)>=flen
  73.    WriteF('\n')
  74. ENDPROC
  75.